home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / misc / quickhelp / quickhelp.demo / quickhelp.demo.c < prev    next >
C/C++ Source or Header  |  1999-09-06  |  9KB  |  410 lines

  1. /* QuickHelp Demo © Paweî Marciniak <pmarciniak@lodz.home.pl>*/
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <exec/types.h>
  6. #include <intuition/intuition.h>
  7. #include <libraries/gadtools.h>
  8. #include <graphics/text.h>
  9. #include <graphics/gfxbase.h>
  10. #include <proto/dos.h>
  11. #include <proto/exec.h>
  12. #include <proto/intuition.h>
  13. #include <proto/graphics.h>
  14. #include <proto/gadtools.h>
  15. #include <proto/diskfont.h> 
  16. #include <clib/quickhelp_protos.h>
  17. #include <pragmas/quickhelp_pragmas.h>
  18. #include <libraries/quickhelp.h>
  19.  
  20. extern struct GfxBase                    *GfxBase    = NULL;
  21. extern struct DosLibrary            *DosBase    = NULL;
  22. extern struct IntuitionBase        *IntuitionBase    = NULL;
  23. extern struct ExecBase                *ExecBase    = NULL;
  24. extern struct Library                    *DiskFontBase    = NULL;
  25. extern struct Library                    *GadToolsBase    = NULL;
  26. extern struct Library                    *QuickHelpBase    = NULL;
  27.  
  28. /* Prototypy */
  29. int SetupScreen( void );
  30. void CloseDownScreen( void );
  31. int OpenDisplay( WORD, WORD );
  32. void CloseDisplay(void );
  33. UWORD ComputeX( UWORD );
  34. UWORD ComputeY( UWORD );
  35. void ComputeFont( void );
  36. LONG OpenLibraries( void );
  37. void CloseLibraries( void );
  38. int OpenFonts( void );
  39. void CloseFonts( void );
  40.  
  41.  
  42. /* zmienna status informuje czy okno pomocy jest
  43. otwarte ( TRUE ) czy zamkniëte ( FALSE ) */
  44.  
  45. int    status=FALSE;
  46.  
  47. struct Screen *Screen=NULL;
  48. struct Window *APP_Window=NULL;
  49.  
  50. STRPTR PubScreenName="Workbench";
  51. STRPTR APP_TitleWindow="Demo okno";
  52. STRPTR APP_TitleScreenWindow="Demo ekran okno";
  53.  
  54. APTR  VisualInfo = NULL;
  55.  
  56. /* Opcjonalny Font */
  57.  
  58. struct TextAttr *Font, ScreenFont;
  59. struct TextFont    *APP_Font;
  60.  
  61. WORD FontX=NULL;
  62. WORD FontY=NULL;
  63. UWORD OffX, OffY;
  64.  
  65. ULONG            IClass;
  66. UWORD            Code, Qualifier;
  67. struct Gadget    *IObject;
  68.  
  69. /* Rozmiar Okna */
  70.  
  71.     WORD Width=320;
  72.     WORD Height=150;
  73.  
  74. /* Tytaj zaczynajâ sië wszystkie poûyteczne funkcje */
  75.  
  76. /* Funkcja otwiera okreôlony font */
  77.  
  78. int OpenFonts( void )
  79. {
  80.     if (!(APP_Font=OpenDiskFont( &ScreenFont )))
  81.         return( FALSE );
  82.     return( TRUE );
  83. }
  84.  
  85.  
  86. /* Funkcja zamyka otwarty font */
  87.  
  88. void CloseFonts( void )
  89. {
  90.     if ( APP_Font )    
  91.     {
  92.         CloseFont( APP_Font );
  93.         APP_Font=NULL;
  94.     }
  95. }
  96.  
  97.  
  98. UWORD ComputeX( UWORD value )
  99. {
  100.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  101. }
  102.  
  103.  
  104. UWORD ComputeY( UWORD value )
  105. {
  106.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  107. }
  108.  
  109.  
  110. void ComputeFont( void )
  111. {
  112.     Font = &ScreenFont;
  113.     Font->ta_Name = (STRPTR)Screen->RastPort.Font->tf_Message.mn_Node.ln_Name;
  114.     Font->ta_YSize = FontY = Screen->RastPort.Font->tf_YSize;
  115.     FontX = Screen->RastPort.Font->tf_XSize;
  116.  
  117.     OffX = Screen->WBorLeft;
  118.     OffY = Screen->RastPort.TxHeight + Screen->WBorTop + 1;
  119.     return;
  120. }
  121.  
  122.  
  123. /* Funkcja otwiera okno */
  124.  
  125. int OpenAPP_Display( WORD Left, WORD Top )
  126. {
  127.     if(!(APP_Window=OpenWindowTags( 0,
  128.         WA_Left,                Left,
  129.         WA_Top,                    Top,
  130.         WA_Width,                Width,
  131.         WA_Height,            Height,
  132.         WA_Title,                APP_TitleWindow,
  133.         WA_ScreenTitle,    APP_TitleScreenWindow,
  134.         WA_Flags,                WFLG_DRAGBAR | WFLG_SIZEGADGET | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_HASZOOM,
  135.         WA_IDCMP,                IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW | IDCMP_GADGETHELP | 
  136.                                         IDCMP_CHANGEWINDOW | IDCMP_INACTIVEWINDOW | IDCMP_ACTIVEWINDOW,
  137.         WA_Gadgets,            FALSE,
  138.         WA_AutoAdjust,    TRUE,
  139.         WA_PubScreen,        (struct Screen *)Screen,
  140.         TAG_DONE)))
  141.             return( FALSE );
  142.     GT_RefreshWindow( APP_Window, NULL );
  143.     return( TRUE );
  144. }
  145.  
  146.  
  147. /* Funkcja zamyka otwarte okno */
  148.  
  149. void CloseAPP_Display(void)
  150. {
  151.     if(APP_Window) 
  152.     {
  153.         CloseWindow((struct Window *)APP_Window);
  154.         APP_Window=NULL;
  155.     }
  156. }
  157.  
  158.  
  159. /* Funkcja odczytuje komunikat Intuition */
  160. /* kod tej funkcji napisaî Raul A. Sobon */
  161.  
  162. LONG ReadIMsg( struct Window *iwnd )
  163. {
  164.     struct IntuiMessage *imsg;
  165.  
  166.     if ( imsg = GT_GetIMsg( iwnd->UserPort ))
  167.     {
  168.         IClass      =    imsg->Class;
  169.         Qualifier    =    imsg->Qualifier;
  170.         Code            =    imsg->Code;
  171.         IObject        =    imsg->IAddress;
  172.  
  173.         GT_ReplyIMsg( imsg );
  174.         return( TRUE );
  175.     }
  176.     return( FALSE );
  177. }
  178.  
  179.  
  180. /* Funkcja alokuje ekran */
  181.  
  182. int SetupScreen( void )
  183. {
  184.     if (!(Screen = LockPubScreen( PubScreenName )))
  185.         return( FALSE );
  186.  
  187.     ComputeFont();
  188.  
  189.     if(!(OpenFonts()))
  190.         return( FALSE );
  191.  
  192.     if (!( VisualInfo = GetVisualInfo( Screen, TAG_DONE )))
  193.         return( FALSE );
  194.  
  195.     return( TRUE );
  196. }
  197.  
  198.  
  199. /* Funkcja dealokuje ekran */
  200.  
  201. void CloseDownScreen( void )
  202. {
  203.     if ( VisualInfo )
  204.     {
  205.         FreeVisualInfo( VisualInfo );
  206.         VisualInfo = NULL;
  207.     }
  208.  
  209.     CloseFonts();
  210.  
  211.     if ( Screen )
  212.     {
  213.         UnlockPubScreen( NULL, Screen );
  214.         Screen = NULL;
  215.     }
  216. }
  217.  
  218.  
  219. /* Funkcja otwiera wszystkie biblioteki */
  220.  
  221. LONG OpenLibraries( void )
  222. {
  223.  
  224.     if ( !(DosBase = (struct DosLibrary *) OpenLibrary((UBYTE *) "dos.library", 36 )))
  225.         return( FALSE );
  226.     if ( !(IntuitionBase = (struct IntuitionBase *) OpenLibrary((UBYTE *) "intuition.library", 39 )))
  227.         return( FALSE );
  228.     if ( !(GadToolsBase = (struct Library *) OpenLibrary((UBYTE *) "gadtools.library", 36 )))
  229.         return( FALSE );
  230.     if ( !(GfxBase = (struct GfxBase *) OpenLibrary((UBYTE *) "graphics.library" , 36 )))
  231.         return( FALSE );
  232.     if ( !(DiskFontBase = (struct Library *) OpenLibrary((UBYTE *) "diskfont.library" , 36 )))
  233.     {
  234.         printf("Non Diskfont.library\n");
  235.         return( FALSE );
  236.     }
  237.     if ( !(QuickHelpBase = (struct Library *) OpenLibrary((UBYTE *) "quickhelp.library" , 37 )))
  238.     {
  239.         printf("Non quickhelp.library\n");
  240.         return( FALSE );
  241.     }
  242.     return( TRUE );
  243. }
  244.  
  245.  
  246. /* Funkcja zamyka wszystkie biblioteki */
  247.  
  248. void CloseLibraries( void )
  249. {
  250.     if (DiskFontBase)        CloseLibrary( (struct Library *) DiskFontBase );
  251.     if (QuickHelpBase)    CloseLibrary( (struct Library *) QuickHelpBase );
  252.     if (GfxBase)                CloseLibrary( (struct Library *) GfxBase );
  253.     if (GadToolsBase)        CloseLibrary( (struct Library *) GadToolsBase );
  254.     if (IntuitionBase)    CloseLibrary( (struct Library *) IntuitionBase );
  255.     if (DosBase)                CloseLibrary( (struct Library *) DOSBase );
  256. }
  257.  
  258.  
  259. /* Gîówna funkcja */
  260.  
  261. int main( int argc, char *argv[] )
  262. {
  263. BOOL running=TRUE;
  264.  
  265.     if(!(OpenLibraries()))
  266.     {
  267.         CloseLibraries();
  268.         return( FALSE );
  269.     }
  270.     
  271.     if(!(SetupScreen()))
  272.     {
  273.         CloseDownScreen();
  274.         CloseLibraries();
  275.         return( FALSE );
  276.     }
  277.  
  278.     if(!(OpenAPP_Display( 20, 20 )))
  279.     {
  280.         CloseDownScreen();
  281.         CloseLibraries();
  282.         return( FALSE );
  283.     }
  284.  
  285.     /* Ustawiamy font i wîâczamy pomoc */
  286.     SetFont(APP_Window->RPort,APP_Font);
  287.     HelpControl(APP_Window, HC_GADGETHELP);
  288.  
  289.  
  290.   do
  291.     {
  292.         WaitPort( APP_Window->UserPort );
  293.  
  294.         while ( ReadIMsg( APP_Window ))
  295.         {
  296.             switch ( IClass )
  297.             {
  298.                 case    IDCMP_ACTIVEWINDOW:
  299.                 case    IDCMP_INACTIVEWINDOW:
  300.                 case    IDCMP_CHANGEWINDOW:
  301.                     CloseHelp();
  302.                 break;
  303.  
  304.  
  305.                 case    IDCMP_REFRESHWINDOW:
  306.                     GT_BeginRefresh( APP_Window );
  307.                     GT_EndRefresh( APP_Window, TRUE );
  308.                     CloseHelp();
  309.                 break;
  310.  
  311.                 case    IDCMP_CLOSEWINDOW:
  312.                     CloseHelp();
  313.                     running=FALSE;
  314.                 break;
  315.  
  316.                 case IDCMP_GADGETHELP:
  317.  
  318.                    if (IObject == NULL)
  319.                 {
  320.                     /* myszka poza naszym oknem */
  321.                         CloseHelp();
  322.                 }
  323.                    else
  324.                         if (IObject == (APTR) APP_Window)
  325.                     {
  326.                         /* myszka nad naszym oknem */
  327.                             CloseHelp();
  328.  
  329.                           }
  330.                     else
  331.                     {
  332.  
  333.                             LONG sysgtype = ((struct Gadget *) IObject)->GadgetType & 0xF0;
  334.  
  335.                             switch (sysgtype)
  336.                             {
  337.                             case GTYP_SIZING:
  338.                                     CloseHelp();
  339.                                     if(!(status=OpenHelp("Pîynna zmiana rozmiaru okna", APP_Font, APP_Window, 0 )))
  340.                                     {
  341.                                         printf("%s\n",GetQuickHelpString());
  342.                                     }
  343.                                 break;
  344.  
  345.                                case GTYP_WDRAGGING:
  346.                                         CloseHelp();
  347.                                     if(!(status=OpenHelp("- Listwa przesuwania okna -\n---\nnacisnij lewy klawisz myszy nad\ntâ listwâ i przesuï do miejsca\ndo którego chcesz", APP_Font, APP_Window, 0)))
  348.                                     {
  349.                                         printf("%s\n",GetQuickHelpString());
  350.                                     }
  351.                                 break;
  352.  
  353.                             case GTYP_WUPFRONT:
  354.                                         CloseHelp();
  355.                                     if(!(status=OpenHelp("Zmiana gîëbokoôci okna", APP_Font, APP_Window, TAG_DONE  )))
  356.                                     {
  357.                                         printf("%s\n",GetQuickHelpString());
  358.                                     }
  359.                                 break;
  360.  
  361.                                case GTYP_WDOWNBACK:
  362.                                         CloseHelp();
  363.                                     if(!(status=OpenHelp("Skokowa zmiana wielkoôci", APP_Font, APP_Window,0 )))
  364.                                     {
  365.                                         printf("%s\n",GetQuickHelpString());
  366.                                     }
  367.                                 break;
  368.  
  369.                             case GTYP_CLOSE:
  370.                                         CloseHelp();
  371.                                     if(!(status=OpenHelp("Kliknij tutaj, ûeby\nzamknâê okno", APP_Font, APP_Window, 0)))
  372.                                     {
  373.                                         printf("%s\n",GetQuickHelpString());
  374.                                     }
  375.                                 break;
  376.   /*
  377.                             case 0:
  378.  
  379.                                     switch(IObject->GadgetID)
  380.                                     {
  381.  
  382.                                       Tutaj nasze gadgety
  383.  
  384.                                     }
  385.                                 break;
  386.   */
  387.                             default:
  388.                                         CloseHelp();
  389.                                     if(!(status=OpenHelp("Nieznany Gadget", APP_Font, APP_Window, 0)))
  390.                                     {
  391.                                         printf("%s\n",GetQuickHelpString());
  392.                                     }
  393.                                 break;
  394.                             }
  395.                     }
  396.                 break;
  397.                         
  398.                 default:
  399.                 break;
  400.             }
  401.         }
  402.     } while ( running );
  403.  
  404.     CloseAPP_Display();
  405.     CloseDownScreen();
  406.   CloseHelp();
  407.     CloseLibraries();
  408.     return( TRUE );
  409. }
  410.